package com.ant.business.system.controller;

import com.ant.business.system.entity.Role;
import com.ant.business.system.service.RoleService;
import com.ant.common.result.ResponseResult;
import com.ant.common.utils.FastMap;
import com.ant.common.utils.StringUtil;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import java.util.Objects;

/**
 * 角色管理控制层
 *
 * @author
 * @description
 * @create 2021-03-22 14:25:56
 */
@RestController
@RequestMapping(value = "/role")
@Slf4j
@Api(tags = "角色管理")
public class RoleController {

    private final RoleService roleService;

    public RoleController(RoleService roleService) {
        this.roleService = roleService;
    }

    /**
     * 角色管理分页查询列表
     *
     * @return
     */
    @PostMapping(value = "/list", name = "角色管理分页查询列表")
    @ApiOperation("角色管理分页查询列表")
    public ResponseResult list(@RequestBody FastMap param) {
        try {
            PageInfo<Role> pages = roleService.getList(param.getInt("page"), param.getInt("limit"), param);
            log.info("角色管理分页查询列表成功");
            return ResponseResult.success("角色管理分页查询列表成功", pages.getList(), pages.getTotal());
        } catch (Exception e) {
            log.info("角色管理分页查询列表失败：" + e.getMessage());
            return ResponseResult.fail("角色管理分页查询列表失败：" + e.getMessage());
        }
    }

    /**
     * 修改角色管理（新增、修改）
     *
     * @param role
     * @return
     */
    @PostMapping(value = "/edit", name = "修改角色管理")
    @ApiOperation("修改角色管理（新增、修改）")
    public ResponseResult edit(@RequestBody Role role) {
        try {
            if (Objects.isNull(role.getRoleId()) || role.getRoleId() <= 0) {
                //新增
                roleService.saveOne(role);
                log.info("角色管理新增成功");
            } else {
                //编辑
                roleService.update(role);
                log.info("角色管理修改成功");
            }
            return ResponseResult.success("角色管理编辑成功");
        } catch (Exception e) {
            log.info("角色管理编辑失败：" + e.getMessage());
            return ResponseResult.fail("角色管理编辑失败：" + e.getMessage());
        }
    }

    /**
     * 删除角色管理
     *
     * @param primaryKey
     * @return
     */
    @PostMapping(value = "/delete", name = "删除角色管理")
    @ApiOperation("删除角色管理")
    public ResponseResult delete(String primaryKey) {
        try {
            if (Objects.isNull(primaryKey) || primaryKey.length() == 0) {
                return ResponseResult.fail("没有找到角色管理编号");
            }
            roleService.delete(primaryKey);
            log.info("角色管理删除成功");
            return ResponseResult.success("角色管理删除成功");
        } catch (Exception e) {
            log.info("角色管理删除失败：" + e.getMessage());
            return ResponseResult.fail("角色管理删除失败：" + e.getMessage());
        }
    }

    /**
     * 绑定角色对应的模块
     *
     * @return
     */
    @PostMapping(value = "/updateRoleModule", name = "绑定角色对应的模块")
    @ApiOperation("绑定角色对应的模块")
    public ResponseResult updateRoleModule(@RequestBody FastMap param) {
        try {
            roleService.updateRoleModule(param);
            log.info("绑定角色对应的模块成功");
            return ResponseResult.success("绑定角色对应的模块成功");
        } catch (Exception e) {
            log.info("绑定角色对应的模块失败：" + e.getMessage());
            return ResponseResult.fail("绑定角色对应的模块失败：" + e.getMessage());
        }
    }
}